from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import *
from common.common import Common


class ShowTabBase:
    def __init__(self, ui, ptr):
        self.ui = ui
        self.ptr = ptr
        self.horn_model_control = None
        self.tweeter_model_control = None
        self.base_model_control = None
        self.base_model_show = None
        self.bluetooth_model_show = None
        self.mess_model_show = None
        pass

    # init tab base(tab)
    def init_ui(self):
        self.init_tab_motor_group_base()
        self.init_tab_motor_group_horn()
        self.init_tab_motor_group_tweeter()
        self.init_tab_motor_group_mess()
        self.init_tab_motor_group_bluetooth()
        self.init_connect()
        pass

    def init_connect(self):
        self.ui.pushButton_base_control.clicked.connect(lambda: self.btn_base_control_clicked("base control"))
        self.ui.pushButton_horn_control.clicked.connect(lambda: self.btn_horn_control_clicked("horn control"))
        self.ui.pushButton_tweeter_control.clicked.connect(
            lambda: self.btn_tweeter_control_clicked("tweeter alarm control"))
        self.ui.pushButton_bluetooth_control.clicked.connect(
            lambda: self.btn_bluetooth_control_clicked("blue tooth control"))
        pass

    def btn_horn_control_clicked(self, info):
        print(info)
        value_str = self.horn_model_control.item(0).child(0, 1).text()
        try:
            value_i = int(value_str)
            if value_i == 1:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x2E, 0x01, 0x00, 0x00, 0x00, 0xA5])
            elif value_i == 0:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x2E, 0x00, 0x00, 0x00, 0x00, 0xA5])
            else:
                QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受0，1", QMessageBox.Cancel)
        except Exception as e:
            print(e)
            QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受数字", QMessageBox.Cancel)

    def btn_tweeter_control_clicked(self, info):
        print(info)
        value_str = self.tweeter_model_control.item(0).child(0, 1).text()
        try:
            value_i = int(value_str)
            if value_i == 1:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x2F, 0x01, 0x00, 0x00, 0x00, 0xA5])
            elif value_i == 0:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x2F, 0x00, 0x00, 0x00, 0x00, 0xA5])
            else:
                QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受0，1", QMessageBox.Cancel)
        except Exception as e:
            print(e)
            QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受数字", QMessageBox.Cancel)

    def btn_base_control_clicked(self, info):
        print(info)
        value_str = self.base_model_control.item(1).child(0, 1).text()
        try:
            value_i = int(value_str)
            if value_i == 1:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x35, 0x01, 0x00, 0x00, 0x00, 0xA5])
            elif value_i == 0:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x35, 0x00, 0x00, 0x00, 0x00, 0xA5])
            else:
                QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受0，1", QMessageBox.Cancel)
        except Exception as e:
            print(e)
            QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受数字", QMessageBox.Cancel)

    def btn_bluetooth_control_clicked(self, info):
        print(info)
        value_str_switch = self.base_model_control.item(0).child(0, 1).text()
        value_str_pair = self.base_model_control.item(1).child(0, 1).text()
        try:
            value_switch_i = int(value_str_switch)
            value_pair_i = int(value_str_pair)
            if value_switch_i == 1:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x30, 0x01, 0x00, 0x00, 0x00, 0xA5])
            elif value_switch_i == 0:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0xA5])
            else:
                QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受0，1", QMessageBox.Cancel)

            if value_pair_i == 1:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x31, 0x01, 0x00, 0x00, 0x00, 0xA5])
            elif value_pair_i == 0:
                Common().get_can_bus().send_data(0x224, [0xA5, 0x01, 0x31, 0x00, 0x00, 0x00, 0x00, 0xA5])
            else:
                QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受0，1", QMessageBox.Cancel)
        except Exception as e:
            print(e)
            QMessageBox.warning(self.ptr, "Error", "非法输入值，只接受数字", QMessageBox.Cancel)

    @staticmethod
    def init_tree_key_show(model):
        # set item
        item = QStandardItem('按键状态')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('home key')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('start key')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('stop key')
        item.appendRow(item_child)
        item.setChild(2, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('ok key')
        item.appendRow(item_child)
        item.setChild(3, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('return key')
        item.appendRow(item_child)
        item.setChild(4, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('left key')
        item.appendRow(item_child)
        item.setChild(5, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('right key')
        item.appendRow(item_child)
        item.setChild(6, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('up key')
        item.appendRow(item_child)
        item.setChild(7, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('down key')
        item.appendRow(item_child)
        item.setChild(8, 1, QStandardItem('[Object]'))
        pass

    @staticmethod
    def init_tree_battery_show(model):
        # set item
        item = QStandardItem('电池信息')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('充电状态(０:未充电,１:充电中,２:充电完成)')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('错误信息')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('电压mv')
        item.appendRow(item_child)
        item.setChild(2, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('电量％')
        item.appendRow(item_child)
        item.setChild(3, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('温度')
        item.appendRow(item_child)
        item.setChild(4, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('激活(1开)')
        item.appendRow(item_child)
        item.setChild(5, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_base_control(model):
        # set item
        item = QStandardItem('控制')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('低功耗(0关1开)')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))
        item.child(0, 1).setEnabled(False)

    @staticmethod
    def init_tree_battery_control(model):
        # set item
        item = QStandardItem('电池')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('电池激活(1激活0非)')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_horn_control(model):
        # set item
        item = QStandardItem('控制')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('喇叭响一声(1开0关)')
        item.appendRow(item_child)
        item_child.setEditable(False)
        item.setChild(0, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_tweeter_control(model):
        # set item
        item = QStandardItem('控制')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('高音报警器(1开0关)')
        item.appendRow(item_child)
        item_child.setEditable(False)
        item.setChild(0, 1, QStandardItem('[Object]'))

    def init_tab_motor_group_horn(self):
        self.horn_model_control = QStandardItemModel(self.ptr)
        self.horn_model_control.setHorizontalHeaderLabels(['item', 'value'])

        self.init_tree_horn_control(self.horn_model_control)
        self.ui.treeView_horn_control.setModel(self.horn_model_control)
        # 调整第一列的宽度
        self.ui.treeView_horn_control.header().resizeSection(0, 260)
        # 设置成有虚线连接的方式
        self.ui.treeView_horn_control.setStyle(QStyleFactory.create('windows'))
        # 完全展开
        self.ui.treeView_horn_control.expandAll()

    def init_tab_motor_group_tweeter(self):
        self.tweeter_model_control = QStandardItemModel(self.ptr)
        self.tweeter_model_control.setHorizontalHeaderLabels(['item', 'value'])

        self.init_tree_tweeter_control(self.tweeter_model_control)
        self.ui.treeView_tweeter_control.setModel(self.tweeter_model_control)
        # 调整第一列的宽度
        self.ui.treeView_tweeter_control.header().resizeSection(0, 260)
        # 设置成有虚线连接的方式
        self.ui.treeView_tweeter_control.setStyle(QStyleFactory.create('windows'))
        # 完全展开
        self.ui.treeView_tweeter_control.expandAll()

    def init_tab_motor_group_base(self):
        self.base_model_control = QStandardItemModel(self.ptr)
        self.base_model_control.setHorizontalHeaderLabels(['item', 'value'])
        self.base_model_show = QStandardItemModel(self.ptr)
        self.base_model_show.setHorizontalHeaderLabels(['item', 'value'])

        self.init_tree_base_control(self.base_model_control)
        self.init_tree_battery_control(self.base_model_control)
        self.init_tree_battery_show(self.base_model_show)
        self.init_tree_key_show(self.base_model_show)

        self.ui.treeView_base_control.setModel(self.base_model_control)
        self.ui.treeView_base_show.setModel(self.base_model_show)
        # 调整第一列的宽度
        self.ui.treeView_base_control.header().resizeSection(0, 260)
        self.ui.treeView_base_show.header().resizeSection(0, 200)
        # 设置成有虚线连接的方式
        self.ui.treeView_base_control.setStyle(QStyleFactory.create('windows'))
        self.ui.treeView_base_show.setStyle(QStyleFactory.create('windows'))
        # 完全展开
        self.ui.treeView_base_control.expandAll()
        self.ui.treeView_base_show.expandAll()

    @staticmethod
    def init_tree_version_show(model):
        # set item
        item = QStandardItem('版本信息')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('MAC地址')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('硬件版本号')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('软件版本号')
        item.appendRow(item_child)
        item.setChild(2, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_wifi_show(model):
        # set item
        item = QStandardItem('WIFI信息')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('WIFI名称')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('IP地址')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_4g_show(model):
        # set item
        item = QStandardItem('4G信息')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('4G信号')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('IP地址')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

    def init_tab_motor_group_mess(self):
        # set table header
        self.mess_model_show = QStandardItemModel(self.ptr)
        self.mess_model_show.setHorizontalHeaderLabels(['item', 'value'])

        self.init_tree_version_show(self.mess_model_show)
        self.init_tree_wifi_show(self.mess_model_show)
        self.init_tree_4g_show(self.mess_model_show)
        self.ui.treeView_version_show.setModel(self.mess_model_show)

        # 调整第一列的宽度
        self.ui.treeView_version_show.header().resizeSection(0, 160)
        # 设置成有虚线连接的方式
        self.ui.treeView_version_show.setStyle(QStyleFactory.create("windows"))
        # 完全展开
        self.ui.treeView_version_show.expandAll()
        pass

    @staticmethod
    def init_tree_bluetooth_control(model):
        # set item
        item = QStandardItem('控制')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('开关(0关1开)')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('配对')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_bluetooth_show(model):
        # set item
        item = QStandardItem('信息')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('蓝牙状态')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('蓝牙连接')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

    def init_tab_motor_group_bluetooth(self):
        # set table header
        model = QStandardItemModel(self.ptr)
        model.setHorizontalHeaderLabels(['item', 'value'])
        self.bluetooth_model_show = QStandardItemModel(self.ptr)
        self.bluetooth_model_show.setHorizontalHeaderLabels(['item', 'value'])

        self.init_tree_bluetooth_control(model)
        self.init_tree_bluetooth_show(self.bluetooth_model_show)
        self.ui.treeView_bluetooth_control.setModel(model)
        self.ui.treeView_bluetooth_show.setModel(self.bluetooth_model_show)

        # 调整第一列的宽度
        self.ui.treeView_bluetooth_control.header().resizeSection(0, 200)
        self.ui.treeView_bluetooth_show.header().resizeSection(0, 200)
        # 设置成有虚线连接的方式get_show_tab_sensor
        self.ptr.ui.treeView_bluetooth_control.setStyle(QStyleFactory.create("windows"))
        self.ui.treeView_bluetooth_show.setStyle(QStyleFactory.create("windows"))
        # 完全展开
        self.ui.treeView_bluetooth_control.expandAll()
        self.ui.treeView_bluetooth_show.expandAll()
        pass

    def update_battery(self, value, child_row, child_col):
        parent_item = self.base_model_show.item(0)
        parent_item.child(child_row, child_col).setText(str(value))

    def update_key(self, value, child_row, child_col):
        parent_item = self.base_model_show.item(1)
        parent_item.child(child_row, child_col).setText(str(value))

    def update_bluetooth(self, value, child_row, child_col):
        parent_item = self.bluetooth_model_show.item(0)
        parent_item.child(child_row, child_col).setText(str(value))

    def update_version(self, value, child_row, child_col):
        parent_item = self.mess_model_show.item(0)
        parent_item.child(child_row, child_col).setText(str(value))

    def update_wifi(self, value, child_row, child_col):
        parent_item = self.mess_model_show.item(1)
        parent_item.child(child_row, child_col).setText(str(value))

    def update_4g(self, value, child_row, child_col):
        parent_item = self.mess_model_show.item(2)
        parent_item.child(child_row, child_col).setText(str(value))